/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.ec.socialfun.controladores;

import com.ec.socialfun.datamanager.DescripcionLocalSucursalDataManager;
import com.ec.socialfun.datamanager.MembresiaDataManager;
import com.ec.socialfun.entidades.Local;
import com.ec.socialfun.entidades.LocalesImagen;
import com.ec.socialfun.entidades.Sucursal;
import com.ec.socialfun.entidades.Usuario;
import com.ec.socialfun.enumeradores.CargaImagenesLocalEnum;
import com.ec.socialfun.enumeradores.EstadoEnum;
import com.ec.socialfun.enumeradores.ParametrosEnum;
import com.ec.socialfun.excepciones.DescargarArchivoException;
import com.ec.socialfun.excepciones.FormaDePagoException;
import com.ec.socialfun.excepciones.ParametroException;
import com.ec.socialfun.excepciones.RecuperaLocalesImagenException;
import com.ec.socialfun.servicios.LocalesFacade;
import com.ec.socialfun.servicios.LocalesFormasDePagoFacade;
import com.ec.socialfun.servicios.LocalesImagenFacade;
import com.ec.socialfun.servicios.MembresiaFacade;
import com.ec.socialfun.servicios.ParametrosFacade;
import com.ec.socialfun.servicios.SucursalFacade;
import com.ec.socialfun.servicios.UsuarioFacade;
import com.ec.socialfun.servicios.externos.FtpServicio;
import java.io.InputStream;
import javax.ejb.EJB;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ManagedProperty;
import javax.faces.bean.RequestScoped;
import javax.faces.component.UIForm;
import org.jboss.logging.Logger;
import org.primefaces.event.TabChangeEvent;
import org.primefaces.model.map.DefaultMapModel;
import org.primefaces.model.map.LatLng;
import org.primefaces.model.map.MapModel;
import org.primefaces.model.map.Marker;

/**
 *
 * @author DESARROLLO
 */
@ManagedBean
@RequestScoped
public class DescripcionLocalSucursalControlador extends PadreControlador {

    private static final Logger LOG = Logger.getLogger(DescripcionLocalSucursalControlador.class.getName());
    @ManagedProperty(value = "#{descripcionLocalSucursalDataManager}")
    private DescripcionLocalSucursalDataManager descripcionLocalSucursalDataManager;
    @ManagedProperty(value = "#{membresiaDataManager}")
    private MembresiaDataManager membresiaDataManager;
    @EJB
    private UsuarioFacade usuarioFacade;
    @EJB
    private LocalesFacade localFacade;
    @EJB
    private MembresiaFacade membresiaFacade;
    @EJB
    private SucursalFacade sucursalFacade;
    @EJB
    private LocalesImagenFacade localesImagenFacade;
    @EJB
    private FtpServicio ftpServicio;
    @EJB
    private ParametrosFacade parametrosFacade;
    @EJB
    private LocalesFormasDePagoFacade localesFormasDePagoFacade;
    
    private MapModel simpleModel;
    private Marker marker;
    private final String TAB_HISTORIA = "tabHistoriaID";
    private final String TAB_EVENTO = "tabEventoID";
    private final String TAB_GOOGLE_MAPS = "tabGoogleMapsID";
    private final String TAB_MEMBRESIA = "tabMembresiaID";
    private final String TAB_FOTOS = "tabFotosID";
    private final String TAB_HORARIOS = "tabHorariosID";
    private final String TAB_FORMAS_DE_PAGO = "tabFormasDePagoID";
    private final String TAB_VIDEO = "tabVideoID";
    
    private Usuario usuario;
    private UIForm formularioDescripcion;

    public LocalesFormasDePagoFacade getLocalesFormasDePagoFacade() {
        return localesFormasDePagoFacade;
    }

    public void setLocalesFormasDePagoFacade(LocalesFormasDePagoFacade localesFormasDePagoFacade) {
        this.localesFormasDePagoFacade = localesFormasDePagoFacade;
    }

    public Usuario getUsuario() {
        return usuario;
    }

    public void setUsuario(Usuario usuario) {
        this.usuario = usuario;
    }

    public MapModel getSimpleModel() {
        simpleModel = new DefaultMapModel();
        LatLng coord1 = new LatLng(getDescripcionLocalSucursalDataManager().getSucursal().getSuLatitud(), getDescripcionLocalSucursalDataManager().getSucursal().getSuLonguitud());
        simpleModel.addOverlay(new Marker(coord1, getDescripcionLocalSucursalDataManager().getSucursal().getSuDescripcion()));
        return simpleModel;
    }

    public void setSimpleModel(MapModel simpleModel) {
        this.simpleModel = simpleModel;
    }

    public Marker getMarker() {
        return marker;
    }

    public void setMarker(Marker marker) {
        this.marker = marker;
    }

    public UIForm getFormularioDescripcion() {
        String codigoLocal = obtenerParametro("id");
        String codigoSucursal = obtenerParametro("id2");

        if (codigoLocal != null) {
            LOG.info("codigoLocal " + codigoLocal);
            Local local = localFacade.recuperarPorCodigo(Integer.parseInt(codigoLocal));
            getDescripcionLocalSucursalDataManager().setLocal(local);
            getMembresiaDataManager().setLocal(local);
            botonAceptar();
            linkDesactivar();
        }

        if (codigoSucursal != null) {
            LOG.info("codigoSucursal " + codigoSucursal);
            Sucursal sucursal = sucursalFacade.recuperarPorCodigo(Integer.parseInt(codigoSucursal));
            getDescripcionLocalSucursalDataManager().setSucursal(sucursal);
        }
        return formularioDescripcion;
    }

    public void setFormularioDescripcion(UIForm formularioDescripcion) {
        this.formularioDescripcion = formularioDescripcion;
    }

    public DescripcionLocalSucursalControlador() {
    }

    @Override
    public void iniciarDatos() {
        
    }

    public void onTabChange(TabChangeEvent event) {
        LOG.info("ID tab= " + event.getTab().getId());
        if (event.getTab().getId().equals(TAB_HISTORIA)) {
            getDescripcionLocalSucursalDataManager().setTabActivo(0);



        } else if (event.getTab().getId().equals(TAB_EVENTO)) {
            getDescripcionLocalSucursalDataManager().setTabActivo(1);




        } else if (event.getTab().getId().equals(TAB_GOOGLE_MAPS)) {
            getDescripcionLocalSucursalDataManager().setTabActivo(2);


        } else if (event.getTab().getId().equals(TAB_MEMBRESIA)) {
            getDescripcionLocalSucursalDataManager().setTabActivo(3);
            botonAceptar();
            linkDesactivar();

        }else if (event.getTab().getId().equals(TAB_FOTOS)) {
            getDescripcionLocalSucursalDataManager().setTabActivo(4);
            recuperarFotosLocal();
        }else if (event.getTab().getId().equals(TAB_HORARIOS)) {
            getDescripcionLocalSucursalDataManager().setTabActivo(5);
        }else if (event.getTab().getId().equals(TAB_FORMAS_DE_PAGO)) {
            getDescripcionLocalSucursalDataManager().setTabActivo(6);
            try {
                getDescripcionLocalSucursalDataManager().setListaTarjetasAceptadas(localesFormasDePagoFacade.recuperaPorEstadoYLocal(getDescripcionLocalSucursalDataManager().getLocal()));
            } catch (FormaDePagoException ex) {
                LOG.info("Forma de Pago exception");
            }
        }else if (event.getTab().getId().equals(TAB_VIDEO)){
             LOG.info("video" + getDescripcionLocalSucursalDataManager().getLocal().getLoVideo());
             getDescripcionLocalSucursalDataManager().setTabActivo(7);
             LOG.info("video" + getDescripcionLocalSucursalDataManager().getLocal().getLoVideo());
        }
    }

    public DescripcionLocalSucursalDataManager getDescripcionLocalSucursalDataManager() {
        return descripcionLocalSucursalDataManager;
    }

    public void setDescripcionLocalSucursalDataManager(DescripcionLocalSucursalDataManager descripcionLocalSucursalDataManager) {
        this.descripcionLocalSucursalDataManager = descripcionLocalSucursalDataManager;
    }

    public void botonAceptar() {
        this.usuario = usuarioFacade.recuperaUsuarioPorMail(obtenerUsuarioLogeado());
        LOG.info("BOTON ACTIVAR");
        if(membresiaFacade.noExisteMembresias(usuario.getUsCodigo(),getMembresiaDataManager().getLocal().getLoCodigo()))
        {
            // muestra boton aceptar
            getMembresiaDataManager().setBanderaAceptar(true);
            
            
        }
        else
        {
            // si existe la membresia
            if(membresiaFacade.recuperarEstado(usuario.getUsCodigo(),getMembresiaDataManager().getLocal().getLoCodigo()).equals(EstadoEnum.INACTIVO.getCodigo()))
            {
                getMembresiaDataManager().setBanderaAceptar(true);
            }
            if(membresiaFacade.recuperarEstado(usuario.getUsCodigo(),getMembresiaDataManager().getLocal().getLoCodigo()).equals(EstadoEnum.ACTIVO.getCodigo()))
            {
                getMembresiaDataManager().setBanderaAceptar(false);
            }
        }
    }

    public void linkDesactivar() {
       this.usuario = usuarioFacade.recuperaUsuarioPorMail(obtenerUsuarioLogeado());
        LOG.info("LINK DESACTIVAR");
        if(!membresiaFacade.noExisteMembresias(usuario.getUsCodigo(),getMembresiaDataManager().getLocal().getLoCodigo()))
        {
            // si existe la membresia
            if(membresiaFacade.recuperarEstado(usuario.getUsCodigo(),getMembresiaDataManager().getLocal().getLoCodigo()).equals(EstadoEnum.ACTIVO.getCodigo()))
            {
                getMembresiaDataManager().setBanderaLink(true);
            }
            if(membresiaFacade.recuperarEstado(usuario.getUsCodigo(),getMembresiaDataManager().getLocal().getLoCodigo()).equals(EstadoEnum.INACTIVO.getCodigo()))
            {
                getMembresiaDataManager().setBanderaLink(false);
            }
        }
        else
        {
            // no existe 
            getMembresiaDataManager().setBanderaLink(false);
        }
    }

    public MembresiaDataManager getMembresiaDataManager() {
        return membresiaDataManager;
    }

    public void setMembresiaDataManager(MembresiaDataManager membresiaDataManager) {
        this.membresiaDataManager = membresiaDataManager;
    }

    public void recuperarFotosLocal() {

        boolean referenciaAImagenes = true;
        try {
            referenciaAImagenes = parametrosFacade.recuperaPorNombre(ParametrosEnum.REFERENCIA_A_IMAGENES.getNombre()).getPaValor().equals("SI") ? true : false;
        } catch (ParametroException e) {
            LOG.error("Error al obtener parametro REFERENCIA_A_IMAGENES " + e);
        }

        getDescripcionLocalSucursalDataManager().setReferenciaAImagenes(referenciaAImagenes);
        LOG.debug("Local" + getDescripcionLocalSucursalDataManager().getLocal().getLoCodigo());
        for (int i = 0; i < CargaImagenesLocalEnum.values().length; i++) {
            try {
                LocalesImagen localesImagen = localesImagenFacade.recuperaPorLocalYOrden(getDescripcionLocalSucursalDataManager().getLocal(), (i + 1));
                if (referenciaAImagenes) {
                    getDescripcionLocalSucursalDataManager().getLocalesImagen()[i] = localesImagen;
                    getDescripcionLocalSucursalDataManager().getInputStreams()[i]=null;
                } else {
                    InputStream is = ftpServicio.obtenerImagenDeFTP(localesImagen.getLoImRutaFoto());
                    getDescripcionLocalSucursalDataManager().getInputStreams()[i] = is;
                    getDescripcionLocalSucursalDataManager().getLocalesImagen()[i]=null;
                }
            } catch (RecuperaLocalesImagenException e) {
                LOG.info("No existe imagen para el local");
                getDescripcionLocalSucursalDataManager().getLocalesImagen()[i] = new LocalesImagen();
                getDescripcionLocalSucursalDataManager().getInputStreams()[i] = null;
            } catch (DescargarArchivoException e) {
                LOG.info("Error al descargar imagen " + e);
                getDescripcionLocalSucursalDataManager().getLocalesImagen()[i] = new LocalesImagen();
                getDescripcionLocalSucursalDataManager().getInputStreams()[i] = null;
            }
        }
    }
}
